package pms.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import pms.dao.JahrDao;
import pms.dao.MitarbeiterAbwesendDao;
import pms.dao.MitarbeiterDao;
import pms.dao.AbteilungDao;

/**
 * <p>
 * Ein Controller, der alle Abwesenheiten des Mitarbeiters ausgibt
 * </p>
 * <p>
 * ModelAndView Infos
 * <ul>
 * <li>title: Ueberschrift dieser View</li>
 * <li>message: Hinweise fuer den Benutzer</li>
 * <li>abwesenheitendesmitarbeiters: Alle Abwesenheiten des Mitarbeiters</li>
 * <li>
 * </ul>
 * Der Name der ausgebenden View ist: 'listAbwesenheitendesMitarbeiters'
 * </p>
 * <p> 
 * Falls Fehler auftreten, wird die view 'Fehler' aufgerufen
 * </p>
 * @see JahrDao
 * @see MitarbeiterAbwesendDao
 * @see MitarbeiterDao
 * @see AbteilungDao
 */

public class AlleAbwesenheitendesMitarbeiters extends AbstractController {
	
	private MitarbeiterAbwesendDao mitarbeiterAbwesendDao;
	private MitarbeiterDao mitarbeiterDao;
	private JahrDao jahrDao;
	private AbteilungDao abteilungDao;

	public JahrDao getJahrDao() {
		return jahrDao;
	}

	public void setJahrDao(JahrDao jahrDao) {
		this.jahrDao = jahrDao;
	}
	public MitarbeiterAbwesendDao getMitarbeiterAbwesendDao() {
		return mitarbeiterAbwesendDao;
	}

	public void setMitarbeiterAbwesendDao(
			MitarbeiterAbwesendDao mitarbeiterAbwesendDao) {
		this.mitarbeiterAbwesendDao = mitarbeiterAbwesendDao;
	}
	
	public MitarbeiterDao getMitarbeiterDao() {
		return mitarbeiterDao;
	}

	public void setMitarbeiterDao(MitarbeiterDao mitarbeiterDao) {
		this.mitarbeiterDao = mitarbeiterDao;
	}

	public AbteilungDao getAbteilungDao() {
		return abteilungDao;
	}

	public void setAbteilungDao(AbteilungDao abteilungDao) {
		this.abteilungDao = abteilungDao;
	}
	
	protected ModelAndView handleRequestInternal(
			HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws Exception 
			{
			httpServletRequest.setCharacterEncoding("UTF-8");
			ModelAndView mv = new ModelAndView();
			SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); 

			Date datumstart;
			Date datumende;
			boolean ok = false;
			mv.addObject("title", "Alle Abwesenheiten des Mitarbeiters");
			try {
				int idm = Integer.parseInt(httpServletRequest.getParameter("idm"));
				int ida = Integer.parseInt(httpServletRequest.getParameter("ida"));
				datumstart = df.parse(httpServletRequest.getParameter("datumstart"));
				datumende = df.parse(httpServletRequest.getParameter("datumende"));
				String ds = httpServletRequest.getParameter("datumstart");
				String de = httpServletRequest.getParameter("datumende");
				ok = mitarbeiterAbwesendDao.pruefedatum(ds, de);
				if (ok) {
					// nun eintragen wenn Abwesenheit im gleichen Jahr und Endedatum grösser als Startdatum
					if (mitarbeiterAbwesendDao.beginnUndEndeAbwesenheitImGleichenJahr(datumstart, datumende)) {
						if (mitarbeiterAbwesendDao.datumEndeGroesseroderGleichDatumStart(datumstart, datumende)) {
							if (mitarbeiterAbwesendDao.nichtueberlappendeAbwesenheiten(idm, datumstart, datumende)) {
								mitarbeiterAbwesendDao.createVorgemerkteAbwesenheit(idm, ida, datumstart, datumende);
							}
						}
					}				
				}
				mv.addObject("message", "Hier können Sie alle Abwesenheiten des Mitarbeiters einsehen bzw. löschen oder bestätigen");
				mv.addObject("mitarbeiter", mitarbeiterDao.findById(idm));
				mv.addObject("abwesenheitendesmitarbeiters", mitarbeiterDao.findeVorgemerkteAbwesenheiten(idm));
				mv.setViewName("listAbwesenheitendesMitarbeiters");
			} catch (Exception e) {
				e.printStackTrace();
				mv.addObject("message", "Die Abwesenheit des Mitarbeiters konnte nicht angelegt werden." +
						" Bitte Eingaben neu...");
				mv.setViewName("Fehler");
			}
			return mv;
	}

}